package demo1;

import java.util.List;

/**
 * 抽象装饰器：单词读取器装饰器（统一扩展入口）
 */
public abstract class WordReaderDecorator implements WordReader {
    protected final WordReader wordReader; // 被装饰的组件（可嵌套）

    // 构造器注入被装饰的组件
    public WordReaderDecorator(WordReader wordReader) {
        this.wordReader = wordReader;
    }

    @Override
    public List<String> readWords() {
        // 模板方法：先调用被装饰组件的核心方法，再执行装饰逻辑
        List<String> words = wordReader.readWords();
        return decorate(words);
    }

    /**
     * 抽象装饰方法：由具体装饰器实现特定功能
     * @param words 待处理的单词列表
     * @return 处理后的单词列表
     */
    protected abstract List<String> decorate(List<String> words);
}
